package sales

import (
	"FinancialManagement/src/business/common"
	"fmt"
	"github.com/shopspring/decimal"
	"time"
)

// CustomDate 自定义日期类型
type CustomDate string

// Scan 实现Scanner接口以从数据库中读取数据
func (cd *CustomDate) Scan(value interface{}) error {
	if v, ok := value.(time.Time); ok {
		*cd = CustomDate(v.Format("2006-01-02")) // 或者其他你需要的格式
		return nil
	}
	return fmt.Errorf("can't convert %v to CustomDate", value)
}

// SalesDetail
// @Description: 销售单结构体
type SalesDetail struct {
	SalesID               int               `gorm:"column:sales_id;primaryKey;" json:"salesId"`                   // 销售订单编号
	SalesType             int               `gorm:"column:sales_type" json:"salesType"`                           // 销售类型，1正常销售，2全额顶销，3部分顶销
	SalesTotalPrice       decimal.Decimal   `gorm:"column:sales_total_price" json:"salesTotalPrice"`              // 自动总金额
	SalesActualTotalPrice decimal.Decimal   `gorm:"column:sales_actual_total_price" json:"salesActualTotalPrice"` // 实际销售总金额
	SalesPureProfit       decimal.Decimal   `gorm:"column:sales_pure_profit" json:"salesPureProfit"`              // 总计销售纯利润
	SalesRemarks          string            `gorm:"column:sales_remarks" json:"salesRemarks"`                     // 备注
	SalesStatus           int               `gorm:"column:sales_status" json:"salesStatus"`                       // 销售订单状态，1暂存，2提交保存，3作废
	SalesPerson           string            `gorm:"column:sales_person" json:"salesPerson"`                       // 销售人
	SalesCreateTime       int64             `gorm:"column:sales_createtime" json:"salesCreateTime"`               // 创建时间
	PurchaseId            int               `gorm:"column:purchase_id" json:"purchaseId"`                         // 关联采购订单ID，指向purchase_detail表的purchase_id
	PurchaseName          string            `gorm:"-" json:"purchaseName"`                                        // 关联采购订单名称
	Items                 []SalesDetailItem `gorm:"foreignKey:SalesID" json:"items"`                              // 销售明细项
}

func (SalesDetail) TableName() string {
	return "sales_detail"
}

// SalesDetailItem
// @Description: 销售明细结构体
type SalesDetailItem struct {
	SdiID            int               `gorm:"column:sdi_id;primaryKey;" json:"sdiId"`             // 销售编号
	SalesID          int               `gorm:"column:sales_id" json:"salesId"`                     // 关联销售明细ID，指向sales_detail表的sales_id
	ProductID        int               `gorm:"column:product_id" json:"productId"`                 // 产品ID
	ProductName      string            `gorm:"-" json:"productName"`                               // 产品名称
	SdiQuantity      decimal.Decimal   `gorm:"column:sdi_quantity" json:"sdiQuantity"`             // 销售数量
	SdiPrice         decimal.Decimal   `gorm:"column:sdi_price" json:"sdiPrice"`                   // 销售单价
	TotalPrice       decimal.Decimal   `gorm:"column:total_price" json:"totalPrice"`               // 自动总金额
	SdiActualAmount  decimal.Decimal   `gorm:"column:sdi_actual_amount" json:"sdiActualAmount"`    // 实际总金额
	SdiCostUnitPrice decimal.Decimal   `gorm:"column:sdi_cost_unit_price" json:"sdiCostUnitPrice"` // 成本单价，采购单中的采购单价（成本单价）
	SdiFullCostPrice decimal.Decimal   `gorm:"column:sdi_full_cost_price" json:"sdiFullCostPrice"` // 成本总价，采购单价*销售数量
	SdiPureProfit    decimal.Decimal   `gorm:"column:sdi_pure_profit" json:"sdiPureProfit"`        // 纯利润
	CustomerID       int               `gorm:"column:customer_id" json:"customerId"`               // 关联客户ID，指向customer表的customer_id
	CustomerName     string            `gorm:"-" json:"customerName"`                              // 客户名称
	SdiDate          common.CustomDate `gorm:"column:sdi_date" json:"sdiDate"`                     // 销售日期
}

func (SalesDetailItem) TableName() string {
	return "sales_detail_item"
}
